#ifndef Q_STORAGE_H
#define Q_STORAGE_H


#include <QFile>
#include <QJsonObject>
#include <QSaveFile>
#include <QTextStream>
#include <QMutex>
#include <QObject>
#include <QTimer>


class Storage final : public QObject
{
    Q_OBJECT
  public:
    explicit Storage(const QString &fullPath, QObject *parent = nullptr);

    /* 热账：内存里已有记录（最新在后） */
    QVector<QJsonObject> hotRecords() const;

    /* 分页：再往前读最多 100 条，返回实际条数 */
    int loadMore();

    /* 运行期追加：只写内存，后台定时刷盘 */
    void append(const QJsonObject &rec);

    /* 全量重写：文件紧凑，正常退出时调用 */
    bool saveAll();

    /* 清空所有记录 */
    void clear();

  signals:
    void error(const QString &msg);

  private slots:
    void onFlush(); // 后台批量落盘

  private:
    QString m_path;
    QVector<QJsonObject> m_cache; // 完整内存账
    qint64 m_filePos = 0;         // 下次倒读位置
    int m_flushedCount = 0;       // 已落盘条数
    bool m_dirty = false;         // 是否有增量
    QTimer m_flushTimer;
    mutable QMutex m_mutex;
};
#endif // Q_STORAGE_H
